package pruebas.testRadares;


import org.junit.*;

import static modelo.SetUps.ALCANCE_RASTREO;
import static modelo.SetUps.ALCANCE_TORPEDO_SIMPLE;
import static modelo.SetUps.RADIO_RASTREO;
import static modelo.SetUps.TOLERANCIA;
import static org.junit.Assert.*;
import modelo.armas.AlcanceAgotadoException;
import modelo.armas.Balas;
import modelo.armas.RadarEnemigo;
import modelo.naves.NaveAlgo42;
import modelo.util.Vector;

public class TestRadarEnemigo {
	private RadarEnemigo radar;
	private Vector p1 = new Vector (0,0);
	private Vector p2 = new Vector (1,0);
	
	@Before
	public void setUp() throws Exception {
		radar = new RadarEnemigo(p1, p2);
	}

	
	@Test
	public void testInicializacion (){
		//radio
		assertEquals ("radio incorrecto",
				RADIO_RASTREO, radar.getRadio(), TOLERANCIA);
		//posicion
		assertEquals ("posicion incorrecta",
				p1, radar.getPosicion());
		//alcance
		assertEquals ("alcance incorrecto", 
				ALCANCE_RASTREO, radar.getAlcance());
		//seguir actuando
		assertTrue ("deberia permitir seguir actuando",
				radar.seguirActuando());
		
	}
	
	
	@Test (expected = AlcanceAgotadoException.class)
	public void testActuar(){
		//va agrandando el radio
		float radio = RADIO_RASTREO;
		for (int i = 0 ; i < ALCANCE_RASTREO ; i++){
			radar.actuar();
			radio += RADIO_RASTREO;
			assertEquals ("incremento de radio incorrecto",
				radio, radar.getRadio(), TOLERANCIA);
		}
		radar.actuar();
	}
	

	@Test 
	public void testColisiones (){
		NaveAlgo42 nave = new NaveAlgo42 (p1,p2);
		int energiaAntesDelChoque = nave.getEnergia();
		// deben poder chocarse espacialmente
		assertTrue ("deberian poder chocarse el radar y la avioneta",
				radar.chocaCon(nave));
		radar.chocarCon(nave);
		//radar no debe seguir actuando
		assertFalse ("no deberia seguir actuando luego de chocar con la nave",
				radar.seguirActuando());
		assertEquals ("la energia de la nave no deberia haber cambiado",
				energiaAntesDelChoque, nave.getEnergia());
		assertEquals ("objeto a seguir no asignado",
				nave, radar.getObjetoASeguir());
		Balas bala = (Balas)radar.dejarNuevoObjetoAlMorir();
		//la bala deberia tener las caracteristicas del torpedo simple
		assertEquals ("bala no inicializada correctamente",
				ALCANCE_TORPEDO_SIMPLE, bala.getAlcance());
	}
}
